//
//  HYHomeViewModel.swift
//  weibo-01
//
//  Created by 源 何 on 16/9/27.
//  Copyright © 2016年 何源. All rights reserved.
//

import UIKit

class HYHomeViewModel: NSObject {
    
    //模型数组
    lazy var viewmodelArray: [HYStatusViewModel] = [HYStatusViewModel] ()
    
    
    /// 加载数据
    ///
    /// - parameter isPullup: 标识是否正在做上拉操作
    /// - parameter finished: 回调闭包
    func loadData (isPullup: Bool,finished: @escaping (Bool,Int) -> ()){
        let urlString = "https://api.weibo.com/2/statuses/home_timeline.json"
        var paramters = ["access_token" : HYUserAccountViewModel.sharedAccountViewModel.userAccount?.access_token ?? ""]
        
        //上拉加载更多需要在参数中添加 max_id字段
        if isPullup {
            //上拉操作
//            paramters["max_id"] = "\((viewmodelArray.last?.status?.id ?? 0) - 1)"
            let id = viewmodelArray.last?.status?.id ?? 0
            paramters["max_id"] = "\(id - 1)"
        } else {
            //第一次加载数据的时候 数组为空的数组 获取id就是0
            let id = viewmodelArray.first?.status?.id ?? 0
            //下拉刷新或者初次加载数据
            //如果since_id有值 就只会返回比该微博新的微博默认是20条
            paramters["since_id"] = "\(id)"
        }
        
        //通过网络工具类发送get请求
        HYNetworkTools.sharedTools.request(method: .GET, urlString: urlString, parameters: paramters) { (responseObject, error) in
            if error != nil {
                
                finished(false,0)
                return
            }
            
            //解析数据  转换字典模型  类型转换  字典转模型
            //前面判断加了error
            let dict = responseObject as! [String: Any]
            
            //根据statues 在字典中取值
            guard let array = dict ["statuses"] as? [[String: Any]] else {
                
                finished(false,0)
                return
            }
            
            //FIXME:  KVC 的赋值
            //遍历数组 字典转模型 添加到数组中
            var tempArray = [HYStatusViewModel]()
            for item in array {
                //                let s = HYStatus(dict:item)
                //                self.statuses.append(s)
                let s = HYStatus()
                let viewmodel = HYStatusViewModel()
                //通过YYmodel的方式来字典转模型
                s.yy_modelSet(with: item)
//                self.statuses.append(s)
                viewmodel.status = s
                //挨个添加参数
//                self.viewmodelArray.append(viewmodel)
                tempArray.append(viewmodel)
            }
            
            //操作viewmodelArray数组
            if isPullup {
                //上拉加载更多数据 追加在数组的后面
                self.viewmodelArray += tempArray
            } else {
                //下拉刷新 插入在数组的前面
                self.viewmodelArray = tempArray + self.viewmodelArray
            }
            
            
            //程序走到这 表示模型数组已经有元素了
            //刷新tableView
//            self.tableView.reloadData()
            //执行闭包
            finished(true,tempArray.count)
        }
    }
}
